package main.java.util;

import java.io.File;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;

import freemarker.cache.FileTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * Freemarker生成代码核心类
 * @author gzq
 *
 */
public class FreemarkerCore {
	
	private static final String ftlBasePath = PropertiesUtil.getFtlBasePath().replace(".", "/");//模板文件基础路径
	private static final String outPutBasePath = PropertiesUtil.getOutPutBasePath();//生成文件基础路径
	
	/**
	 * 模板解析并且生成代码
	 * 
	 * 先创建Configuration，并且配置编码和配置生成模板文件加载器
	 * 然后通过cf.getTemplate("模板名称")，得到模板信息
	 * 然后再通过tl.process(Map集合-主要是填充模板中的参数值, Writer-文件流字节)
	 * 最后生成文件路径，并且将上面的到的Writer-文件流字节，写到文件中
	 * 
	 */
	public void freemarkerParse(HashMap<String, Object> map) {
		String fplpath = this.getClass().getResource("/").getPath() + ftlBasePath;
		Configuration cf = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
		cf.setDefaultEncoding("UTF-8");//这里必须要配置编码，不然生成的页面会有乱码
		Template tl;
		try {
			File file = new File(fplpath);
			cf.setTemplateLoader(new FileTemplateLoader(file));
			tl = cf.getTemplate("freemarkertest.ftl");
			Writer out = new StringWriter();
			tl.process(map, out);
			//生成文件路径
			FileUtil.mkdir(outPutBasePath);
			String basedir = "index.jsp";
			FileUtil.writerOut(outPutBasePath + "/" + basedir, out.toString());
			System.out.println("页面代码生成成功");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
